﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla;
using Csla.Tools;
using Csla.Data;
using DemoCSLA.DalLinq;

namespace DemoCSLA.Libreria.Editables
{

    //******************************************
    //Clase generada por un Snippet de Erick Orlando © 2010
    //******************************************

    [Serializable()]
    public partial class FacturaDetalles : BusinessListBase<FacturaDetalles, FacturaDetalle>
    {
        #region Métodos de instanciación

        internal static FacturaDetalles NewFacturaDetalles()
        {
            return DataPortal.CreateChild<FacturaDetalles>();
        }

        public static FacturaDetalles GetFacturaDetalles(FacturaCabecera parent)
        {
            return DataPortal.FetchChild<FacturaDetalles>(parent);
        }

        /// <summary>
        /// Ubica un unico elemento en la colección
        /// </summary>
        public FacturaDetalle GetItem(string IdTtem)
        {
            return this.Where(d => d.IdFacturaDetalle.Equals(IdTtem)).Single();
        }

        /// <summary>
        /// Sobrecarga de la funcion AddNew
        /// </summary>
        public new FacturaDetalle AddNew()
        {
            return DataPortal.CreateChild<FacturaDetalle>();
        }

        /// <summary>
        /// Sobrecarga de la función Add
        /// </summary>
        public new void Add(FacturaDetalle item)
        {
            if (!Contains(item))
                base.Add(item);
            else
                throw new InvalidOperationException("No se puede agregar nuevamente este producto!");
        }

        #endregion // Métodos de instanciación

        #region Constructores

        private FacturaDetalles()
        { /* Prevenimos la creación directa de esta clase */}


        #endregion

        #region Data Access

        #region Data Access - Fetch

        protected void Child_Fetch(FacturaCabecera criteria)
        {
            if (criteria == null) return;

            this.RaiseListChangedEvents = false;

            using (var ctx = ContextManager<DemoCSLADataContext>
                .GetManager(Contexto.DemoCSLA))
            {
                var q = Detalle.GetDetalleByFactura(ctx.DataContext, 
                    criteria.IdFacturaCabecera);
                foreach (var item in q)
                {
                    base.Add(FacturaDetalle.GetFacturaDetalle(item));
                }
        
            }
            
            this.RaiseListChangedEvents = true;
        }

        #endregion //Data Access - Fetch

        #endregion
    }

}
